Memory arrays, such as semiconductor dynamic random access memory arrays, hereinafter "DRAM", are typically available in certain standard sizes of access width, such as 16 bits (2 bytes) wide.
The data stored in such memory arrays is used for many purposes. One example is the temporary storage of data as it is transferred between a host computer system and a data storage system, such as magnetic tape or optical disk data storage systems.
It is critical that the temporarily stored data be transferred at high speed, without stopping, and be correct, without errors, when transferred.
When data is stored on magnetic tape or optical disk, it may be archived for a time such that the original source of the data updates or alters the originating information in the meantime. If, as is typical, the magnetic tape or optical disk is employed as Backup, the user is likely to access the Backup data because the primary storage has failed and the user is trying to rebuild it. Thus, should the stored data have uncorrectable errors which cannot be ascertained from the context, and the original data is lost, there is no way to rebuild the data.
The magnetic tape or optical disk is a moving medium, such that no convenient opportunity exists to stop, or interrupt, the transfer of the data for retransfer thereof.
As the result, it is important to employ a memory array system which has an error correction and detection capability. As pointed out by U.S. Pat. No. 5,099,484, Smelser, filed Jun. 9, 1989, the increase in RAM chip densities and the movement to ever larger dynamic RAM's has resulted in failure mechanisms that can result in multiple bits in error, which are not correctable by most Hamming codes once used for RAM memory arrays. Smelser proposes the use of Reed-Solomon error correcting codes to provide check symbols stored with the data for multibit error detection and correction. To store the data symbols together with the check symbols is workable in the context of a CPU memory but does not take into account the need for altering the memory content for headers during the transfer of records to data storage, as will be explained.
Another approach, such as that illustrated in U.S. Pat. No. 5,469,451, Henmi, filed Nov. 23, 1994, is to employ separate memory arrays for the data and for the error correcting symbols (separate PROMS are illustrated). The data handling for separate arrays allows the memory addresses to be checked also, but suffers the same problem as above for adding headers to the data subsequent to the temporary storage of the data.
As described above, the inability to locate the original data to substitute for any erroneous uncorrectable data stored on magnetic tape or optical disk requires that the stored data itself have at least an error detection capability. Certain standards of error detection capability have been defined as parts of the data storage file formats. For example, the IBM 3494 Data Storage Library file format employs a 4 byte cyclic redundancy check (CRC) for all data files, which typically are compressed. Thus, the data temporarily stored by the memory array will also have appended CRC information.
Data or information to be stored on data storage media such as optical disk or on magnetic tape requires the addition of headers or information identifying and defining the data or information and its method of recording (e.g., the compression code) so that it can be identified and, hopefully, read at a later date. Conventionally, such headers are of a defined length shorter than the typical record, and often, have their own Reed-Solomon error detecting cyclic redundancy code, CRC. Therefore, typically, the headers are generated separately from the data to be recorded and stored in a special "header" memory array system for entry into the recording medium prior to the associated data file. The special "header" memory array system once again requires error correction which may duplicate the data memory array system.
The above standards of data storage file formats include definitions of the headers and the error detection capability for the headers, as well. For example, the IBM 3494 Data Storage Library file format has a 96 byte device block header, which is composed of three separate 32 byte fields, each of which includes as its last 4 bytes the cyclic redundancy check (CRC) bytes of the 28 bytes of header data which precede it. The device block header may be for one or for a sequence of data files. Next is a file header of 32 bytes, which again comprises 28 bytes of header data and 4 bytes which are the CRC of the header data. Next would be the compressed data file, which is padded, if necessary, to make it some multiple of 32 bytes in length. As described above, the last 4 bytes of any data file is the CRC on the data which precedes it. The CRC for the data and the headers is calculated by a Reed-Solomon polynomial.
However, the headers are typically supplied separately from the data.
Thus, the typical data memory system for a data storage system may comprise separate header and data memory array systems. The headers will have a CRC generator employing one Reed-Solomon code, a memory array system with ECC generation for headers requiring separate memory arrays for the ECC and for the header which includes the CRC. The data will have another CRC generator for generating the CRC for the data to be stored, and another memory array system with ECC generation for the data requiring separate memory arrays for the ECC and for the data which includes the CRC. The resultant system is duplicative and not cost efficient. Alternatively, the header information may employ special circuitry which does not require a memory array, but will generate the CRC, but which must be highly accurate or have an equivalent to the memory array ECC for assuring accuracy. Such specialized circuitry may require a custom circuit with a corresponding "custom" price and will not be cost efficient.